package com.factory.rental.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.factory.rental.dto.CleaningRecordDTO;
import com.factory.rental.model.CleaningRecord;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 清洁记录服务接口
 */
public interface CleaningRecordService extends IService<CleaningRecord> {
    /**
     * 保存清洁记录
     * @param cleaningRecordDTO 清洁记录DTO
     * @return 保存后的清洁记录实体
     */
    CleaningRecord saveCleaningRecord(CleaningRecordDTO cleaningRecordDTO);

    /**
     * 根据ID获取清洁记录
     * @param id 清洁记录ID
     * @return 清洁记录实体
     */
    Optional<CleaningRecord> getCleaningRecordById(Long id);

    /**
     * 根据房间ID获取清洁记录列表
     * @param roomId 房间ID
     * @return 清洁记录列表
     */
    List<CleaningRecord> getCleaningRecordsByRoomId(Long roomId);

    /**
     * 根据清洁员ID获取清洁记录列表
     * @param cleanerId 清洁员ID
     * @return 清洁记录列表
     */
    List<CleaningRecord> getCleaningRecordsByCleanerId(String cleanerId);

    /**
     * 根据状态获取清洁记录列表
     * @param status 清洁状态
     * @return 清洁记录列表
     */
    List<CleaningRecord> getCleaningRecordsByStatus(CleaningRecord.CleaningStatus status);

    /**
     * 获取所有清洁记录（分页）
     * @param pageable 分页参数
     * @return 分页后的清洁记录列表
     */
    Page<CleaningRecord> getAllCleaningRecords(Pageable pageable);

    /**
     * 更新清洁记录
     * @param id 清洁记录ID
     * @param cleaningRecordDTO 清洁记录DTO
     * @return 更新后的清洁记录实体
     */
    CleaningRecord updateCleaningRecord(Long id, CleaningRecordDTO cleaningRecordDTO);

    /**
     * 删除清洁记录
     * @param id 清洁记录ID
     */
    void deleteCleaningRecord(Long id);

    /**
     * 更新清洁记录状态
     * @param id 清洁记录ID
     * @param status 新的清洁状态
     */
    void updateCleaningRecordStatus(Long id, CleaningRecord.CleaningStatus status);

    /**
     * 检查清洁记录
     * @param id 清洁记录ID
     * @param score 评分
     * @param notes 检查备注
     */
    void inspectCleaningRecord(Long id, Integer score, String notes);
}